/*
 * CompresorEstructurado.cpp
 *
 *  Created on: 12/06/2012
 *      Author: danielspacek
 */

#include <iostream>

#include "CompresorEstructurado"

CompresorEstructurado::CompresorEstructurado(obitstream *os) :
	Estructurado(&compresor),compresor(os) {}

void CompresorEstructurado::comprimirBloque(uchar *block, integer size)
{

	this->resetearEstadisticas();
	while(size--)
	{
//	    if (size == 110)
//            printf("Hola soy un breakpoint\n");
	    comprimir(block++);
	}
	//this->finalizarBloque();
}

void CompresorEstructurado::comprimir(uchar *caracter)
{
	//niveles[0]->Comprimir(caracter);
	// Al sacar la recursividad, tengo que codificarlo por acá
	this->contadorBytes++;
	int i,r;
	for(i=0,r=1;i<NIVELES && r==1;i++)
	{
		r = this->niveles[i]->Comprimir(caracter);
//		int p = compresor.piso();
//		int t = compresor.techo();
//		fprintf(stderr,"Piso: %d,  Techo %d \n",p,t);
//		printf("Piso: %d,  Techo %d \n",p,t);
	}
	//fprintf(stderr,"Piso: %d,  Techo %d \n",compresor.piso(),compresor.techo());
//	printf("Piso: %d,  Techo %d \n",compresor.piso(),compresor.techo());
//	std::cout<<"Piso: "<<compresor.piso()<<" Techo:  "<<compresor.techo()<<std::endl;
	//std::cerr<<"Piso: "<<compresor.piso()<<" Techo:  "<<compresor.techo()<<std::endl;
	//std::clog<<"Piso: "<<compresor.piso()<<" Techo:  "<<compresor.techo()<<std::endl;
}

void CompresorEstructurado::finalizarArchivo(bool finalizaBloque) {
	for(uchar i = 0; i < NIVELES; i++) {
		niveles[i]->emitirEscape();
	}
	if (finalizaBloque) finalizarBloque();
}

void CompresorEstructurado::finalizarBloque() {
	this->resetearEstadisticas();
	compresor.finalizar();
}
